package mymyoux.utils
{
	import mymyoux.core.IObject;
	
	/**
	 * Stocke des valeurs dans un Array et sert d'Iterator.
	 * Permet ainsi dans les classes I/O de temporiser les actions.
	 * @author Mymyoux
	 * @version 1.0
	 */
	public class Tampon implements IObject{
		/**
		 * Tableau contenant les valeurs à conserver.
		 */
		protected var tampon:Array;
		/**
		 * Crée une instance de type Tampon.
		 */
		public function Tampon(){
			tampon=new Array();
		}
		/**
		 * Ajoute une variable à la fin du tableau.
		 * @param s Variable à ajouter.
		 */
		public function add(s:*):void{
			tampon.push(s);
		}
		/**
		 * Indique s'il reste des données conservées.
		 * @return <code><b>true</b></code> s'il en reste, <code><b>false</b></code> sinon.
		 */
		public function hasNext():Boolean{
			return tampon.length>0;
		}
		/**
		 * Renvoie la prochaine valeur stockée et la supprime du tableau.
		 * @return La valeur stockée ou <code><b>null</b></code> si le tableau est vide.
		 */
		public function next():*{
			if(hasNext()){
				return tampon.shift();
			}else{
				return null;
			}
		}
		/**
		 * Renvoie le nombre de variables stockées.
		 */
		public function get length():uint{
			return tampon.length;
		}
		/**
		 * @inheritDoc
		 */
		public function toString():String
		{
			return "[Tampon length=\""+length+"\"]";
		}
		/**
		 * @inheritDoc
		 */
		public function destroy():void
		{
			tampon=new Array();
		}
		/**
		 * @inheritDoc
		 */
		public function equals(objet:IObject):Boolean
		{
			return this===objet;
		}
	}
}